/*
* @Author: monster
* @Date:   2017-09-18 15:26:01
* @Last Modified by:   monster
* @Last Modified time: 2017-09-18 21:32:13
*/
// 配置gulp
var gulp = require('gulp');//最重要的模块引入
//引入这个模块的目的：简化输入插件的操作
var $ = require('gulp-load-plugins')();//注意：需要实例化
var open = require('open');

// 封装一个对象来简化路径输入
var app = {
	srcPath : 'src/',
	devPath : 'build/',
	prdPath : 'dist/'
};

// 开始定义任务

// 拷贝bower里的文件到开发目录和生产目录中
gulp.task('lib',function(){//定义任务的api叫task
	// 在回调函数中写逻辑
	gulp.src('bower_components/**/*.js')//深度遍历文件
	// 使用链式操作，用dest去拷贝
	.pipe(gulp.dest(app.devPath + 'vendor'))
	.pipe(gulp.dest(app.prdPath + 'vendor'))
	// 通知服务器来刷新游览器
	.pipe($.connect.reload());
});

// 拷贝src里的文件到开发目录和生产目录中
gulp.task('html',function(){
	gulp.src(app.srcPath + '**/*.html')
	.pipe(gulp.dest(app.devPath))
	.pipe(gulp.dest(app.prdPath))
	.pipe($.connect.reload());
});

// 拷贝data里的json(假数据)到开发目录和生产目录中
gulp.task('json',function(){
	gulp.src(app.srcPath + 'data/**/*.json')
	.pipe(gulp.dest(app.devPath + 'data'))
	.pipe(gulp.dest(app.prdPath + 'data'))
	.pipe($.connect.reload());
});

gulp.task('less',function(){
	gulp.src(app.srcPath + 'style/index.less')
	// 进行编译
	.pipe($.less())
	// 编译完成后放入开发目录
	.pipe(gulp.dest(app.devPath + 'css'))
	// 进行压缩
	.pipe($.cssmin())
	// 完成后放入生产环境
	.pipe(gulp.dest(app.prdPath + 'css'))
	.pipe($.connect.reload());
});

gulp.task('js',function(){
	gulp.src(app.srcPath + 'script/**/*.js')
	// 进行合并，合并到index.js
	.pipe($.concat('index.js'))
	// 完成后放入开发目录
	.pipe(gulp.dest(app.devPath + 'js'))
	// 进行压缩
	.pipe($.uglify())
	// 完成后放入生产环境
	.pipe(gulp.dest(app.prdPath + 'js'))
	.pipe($.connect.reload());
});

gulp.task('image',function(){
	gulp.src(app.srcPath + 'image/**/*')
	.pipe(gulp.dest(app.devPath + 'image'))
	// 进行压缩
	.pipe($.imagemin())
	.pipe(gulp.dest(app.prdPath + 'image'))
	.pipe($.connect.reload());
});

// 定义一个总任务，去完成项目的打包
gulp.task('build',['image','js','less','lib','html','json']);

// 定义一个删除开发目录和生产目录的任务
gulp.task('clean', function(){
	gulp.src([app.prdPath,app.devPath])
	.pipe($.clean());
});

// 定义一个启动服务器的任务
gulp.task('serve',['build'],function() {
	$.connect.server({
		// 定义路径
		root : [app.devPath],
		// 是否随着保存变更文件而自动刷新
		livereload : true,//不支持老IE
		// 定义端口
		port : 1234
	});
	// 自动打开网址
	open('http://localhost:1234');

	// 监控原路径的文件，为了达到修改原文件就会自动执行对应的构建任务的目的
	gulp.watch('bower_components/**/*', ['lib']);
  	gulp.watch(app.srcPath + '**/*.html', ['html']);
  	gulp.watch(app.srcPath + 'data/**/*.json', ['json']);
  	gulp.watch(app.srcPath + 'style/**/*.less', ['less']);
  	gulp.watch(app.srcPath + 'script/**/*.js', ['js']);
  	gulp.watch(app.srcPath + 'image/**/*', ['image']);
});

// 定义一个默认的任务，在控制台输入gulp就会自动执行serve任务
gulp.task('default',['serve']);